<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<head>
    <title>Penlight Documentation</title>
    <link rel="stylesheet" href="../ldoc.css" type="text/css" />
</head>
<body>

<div id="container">

<div id="product">
	<div id="product_logo"></div>
	<div id="product_name"><big><b></b></big></div>
	<div id="product_description"></div>
</div> <!-- id="product" -->


<div id="main">


<!-- Menu -->

<div id="navigation">
<br/>
<h1>Penlight</h1>

<ul>
  <li><a href="../index.html">Index</a></li>
</ul>

<h2>Contents</h2>
<ul>
<li><a href="#Functions">Functions</a></li>
</ul>


<h2>Modules</h2>
<ul>
  <li><a href="../modules/pl.html">pl</a></li>
  <li><a href="../modules/pl.Date.html">pl.Date</a></li>
  <li><a href="../modules/pl.List.html">pl.List</a></li>
  <li><a href="../modules/pl.Map.html">pl.Map</a></li>
  <li><a href="../modules/pl.MultiMap.html">pl.MultiMap</a></li>
  <li><a href="../modules/pl.OrderedMap.html">pl.OrderedMap</a></li>
  <li><a href="../modules/pl.Set.html">pl.Set</a></li>
  <li><a href="../modules/pl.app.html">pl.app</a></li>
  <li><a href="../modules/pl.array2d.html">pl.array2d</a></li>
  <li><a href="../modules/pl.class.html">pl.class</a></li>
  <li><a href="../modules/pl.comprehension.html">pl.comprehension</a></li>
  <li><a href="../modules/pl.config.html">pl.config</a></li>
  <li><a href="../modules/pl.data.html">pl.data</a></li>
  <li><strong>pl.dir</strong></li>
  <li><a href="../modules/pl.file.html">pl.file</a></li>
  <li><a href="../modules/pl.func.html">pl.func</a></li>
  <li><a href="../modules/pl.input.html">pl.input</a></li>
  <li><a href="../modules/pl.lapp.html">pl.lapp</a></li>
  <li><a href="../modules/pl.lexer.html">pl.lexer</a></li>
  <li><a href="../modules/pl.luabalanced.html">pl.luabalanced</a></li>
  <li><a href="../modules/pl.operator.html">pl.operator</a></li>
  <li><a href="../modules/pl.path.html">pl.path</a></li>
  <li><a href="../modules/pl.permute.html">pl.permute</a></li>
  <li><a href="../modules/pl.pretty.html">pl.pretty</a></li>
  <li><a href="../modules/pl.seq.html">pl.seq</a></li>
  <li><a href="../modules/pl.sip.html">pl.sip</a></li>
  <li><a href="../modules/pl.strict.html">pl.strict</a></li>
  <li><a href="../modules/pl.stringio.html">pl.stringio</a></li>
  <li><a href="../modules/pl.stringx.html">pl.stringx</a></li>
  <li><a href="../modules/pl.tablex.html">pl.tablex</a></li>
  <li><a href="../modules/pl.template.html">pl.template</a></li>
  <li><a href="../modules/pl.test.html">pl.test</a></li>
  <li><a href="../modules/pl.text.html">pl.text</a></li>
  <li><a href="../modules/pl.utils.html">pl.utils</a></li>
  <li><a href="../modules/pl.xml.html">pl.xml</a></li>
</ul>
<h2>Topics</h2>
<ul>
  <li><a href="../topics/01-introduction.md.html">01-introduction.md</a></li>
  <li><a href="../topics/02-arrays.md.html">02-arrays.md</a></li>
  <li><a href="../topics/03-strings.md.html">03-strings.md</a></li>
  <li><a href="../topics/04-paths.md.html">04-paths.md</a></li>
  <li><a href="../topics/05-dates.md.html">05-dates.md</a></li>
  <li><a href="../topics/06-data.md.html">06-data.md</a></li>
  <li><a href="../topics/07-functional.md.html">07-functional.md</a></li>
  <li><a href="../topics/08-additional.md.html">08-additional.md</a></li>
  <li><a href="../topics/09-discussion.md.html">09-discussion.md</a></li>
</ul>
<h2>Examples</h2>
<ul>
  <li><a href="../examples/seesubst.lua.html">seesubst.lua</a></li>
  <li><a href="../examples/sipscan.lua.html">sipscan.lua</a></li>
  <li><a href="../examples/symbols.lua.html">symbols.lua</a></li>
  <li><a href="../examples/test-cmp.lua.html">test-cmp.lua</a></li>
  <li><a href="../examples/test-data.lua.html">test-data.lua</a></li>
  <li><a href="../examples/test-listcallbacks.lua.html">test-listcallbacks.lua</a></li>
  <li><a href="../examples/test-pretty.lua.html">test-pretty.lua</a></li>
  <li><a href="../examples/test-symbols.lua.html">test-symbols.lua</a></li>
  <li><a href="../examples/testapp.lua.html">testapp.lua</a></li>
  <li><a href="../examples/testclone.lua.html">testclone.lua</a></li>
  <li><a href="../examples/testconfig.lua.html">testconfig.lua</a></li>
  <li><a href="../examples/testglobal.lua.html">testglobal.lua</a></li>
  <li><a href="../examples/testinputfields.lua.html">testinputfields.lua</a></li>
  <li><a href="../examples/testinputfields2.lua.html">testinputfields2.lua</a></li>
  <li><a href="../examples/testxml.lua.html">testxml.lua</a></li>
  <li><a href="../examples/which.lua.html">which.lua</a></li>
</ul>

</div>

<div id="content">

<h1>Module <code>pl.dir</code></h1>

<p>Useful functions for getting directory contents and matching them against wildcards.</p>
<p> Dependencies: <a href="../modules/pl.utils.html#">pl.utils</a> , <a href="../modules/pl.path.html#">pl.path</a> , <a href="../modules/pl.tablex.html#">pl.tablex</a> </p>

<p> Soft Dependencies: <code>alien</code>, <code>ffi</code> (either are used on Windows for copying/moving files)</p>

<h2><a href="#Functions">Functions</a></h2>
<table class="function_list">
	<tr>
	<td class="name" nowrap><a href="#fnmatch">fnmatch&nbsp;(file, pattern)</a></td>
	<td class="summary">does the filename match the shell pattern?.</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#filter">filter&nbsp;(files, pattern)</a></td>
	<td class="summary">return a list of all files which match the pattern.</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#getfiles">getfiles&nbsp;(dir, mask)</a></td>
	<td class="summary">return a list of all files in a directory which match the a shell pattern.</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#getdirectories">getdirectories&nbsp;(dir)</a></td>
	<td class="summary">return a list of all subdirectories of the directory.</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#copyfile">copyfile&nbsp;(src, dest, flag)</a></td>
	<td class="summary">copy a file.</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#movefile">movefile&nbsp;(src, dest)</a></td>
	<td class="summary">move a file.</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#walk">walk&nbsp;(root, bottom_up, follow_links)</a></td>
	<td class="summary">return an iterator which walks through a directory tree starting at root.</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#rmtree">rmtree&nbsp;(fullpath)</a></td>
	<td class="summary">remove a whole directory tree.</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#makepath">makepath&nbsp;(p)</a></td>
	<td class="summary">create a directory path.</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#clonetree">clonetree&nbsp;(path1, path2, file_fun, verbose)</a></td>
	<td class="summary">clone a directory tree.</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#dirtree">dirtree&nbsp;(d)</a></td>
	<td class="summary">return an iterator over all entries in a directory tree</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#getallfiles">getallfiles&nbsp;(start_path, pattern)</a></td>
	<td class="summary">Recursively returns all the file starting at <i>path</i>.</td>
	</tr>
</table>

<br/>
<br/>


    <h2><a name="Functions"></a>Functions</h2>
    
    <dl class="function">
    <dt>
    <a name = "fnmatch"></a>
    <strong>fnmatch&nbsp;(file, pattern)</strong>
    </dt>
    <dd>
    does the filename match the shell pattern?. 
 (cf. fnmatch.fnmatch in Python, 11.8)

    <h3>Parameters:</h3>
    <ul>
       <li><code><em>file</em></code>:  A file name</li>
       <li><code><em>pattern</em></code>:  A shell pattern</li>
    </ul>


    <h3>Returns:</h3>
    <ol>
        true or false
    </ol>

    <h3>Raises:</h3>
    file and pattern must be strings

</dd>
    <dt>
    <a name = "filter"></a>
    <strong>filter&nbsp;(files, pattern)</strong>
    </dt>
    <dd>
    return a list of all files which match the pattern. 
 (cf. fnmatch.filter in Python, 11.8)

    <h3>Parameters:</h3>
    <ul>
       <li><code><em>files</em></code>:  A table containing file names</li>
       <li><code><em>pattern</em></code>:  A shell pattern.</li>
    </ul>


    <h3>Returns:</h3>
    <ol>
        list of files
    </ol>

    <h3>Raises:</h3>
    file and pattern must be strings

</dd>
    <dt>
    <a name = "getfiles"></a>
    <strong>getfiles&nbsp;(dir, mask)</strong>
    </dt>
    <dd>
    return a list of all files in a directory which match the a shell pattern. 

    <h3>Parameters:</h3>
    <ul>
       <li><code><em>dir</em></code>:  A directory. If not given, all files in current directory are returned.</li>
       <li><code><em>mask</em></code>:   A shell pattern. If  not given, all files are returned.</li>
    </ul>


    <h3>Returns:</h3>
    <ol>
        lsit of files
    </ol>

    <h3>Raises:</h3>
    dir and mask must be strings

</dd>
    <dt>
    <a name = "getdirectories"></a>
    <strong>getdirectories&nbsp;(dir)</strong>
    </dt>
    <dd>
    return a list of all subdirectories of the directory. 

    <h3>Parameters:</h3>
    <ul>
       <li><code><em>dir</em></code>:  A directory</li>
    </ul>


    <h3>Returns:</h3>
    <ol>
        a list of directories
    </ol>

    <h3>Raises:</h3>
    dir must be a string

</dd>
    <dt>
    <a name = "copyfile"></a>
    <strong>copyfile&nbsp;(src, dest, flag)</strong>
    </dt>
    <dd>
    copy a file. 

    <h3>Parameters:</h3>
    <ul>
       <li><code><em>src</em></code>:  source file</li>
       <li><code><em>dest</em></code>:  destination file or directory</li>
       <li><code><em>flag</em></code>:  true if you want to force the copy (default)</li>
    </ul>


    <h3>Returns:</h3>
    <ol>
        true if operation succeeded
    </ol>

    <h3>Raises:</h3>
    src and dest must be strings

</dd>
    <dt>
    <a name = "movefile"></a>
    <strong>movefile&nbsp;(src, dest)</strong>
    </dt>
    <dd>
    move a file. 

    <h3>Parameters:</h3>
    <ul>
       <li><code><em>src</em></code>:  source file</li>
       <li><code><em>dest</em></code>:  destination file or directory</li>
    </ul>


    <h3>Returns:</h3>
    <ol>
        true if operation succeeded
    </ol>

    <h3>Raises:</h3>
    src and dest must be strings

</dd>
    <dt>
    <a name = "walk"></a>
    <strong>walk&nbsp;(root, bottom_up, follow_links)</strong>
    </dt>
    <dd>
    return an iterator which walks through a directory tree starting at root. 
 The iterator returns (root,dirs,files)
 Note that dirs and files are lists of names (i.e. you must say path.join(root,d)
 to get the actual full path)
 If bottom_up is false (or not present), then the entries at the current level are returned
 before we go deeper. This means that you can modify the returned list of directories before
 continuing.
 This is a clone of os.walk from the Python libraries.

    <h3>Parameters:</h3>
    <ul>
       <li><code><em>root</em></code>:  A starting directory</li>
       <li><code><em>bottom_up</em></code>:  False if we start listing entries immediately.</li>
       <li><code><em>follow_links</em></code>:  follow symbolic links</li>
    </ul>


    <h3>Returns:</h3>
    <ol>
        an iterator returning root,dirs,files
    </ol>

    <h3>Raises:</h3>
    root must be a string

</dd>
    <dt>
    <a name = "rmtree"></a>
    <strong>rmtree&nbsp;(fullpath)</strong>
    </dt>
    <dd>
    remove a whole directory tree. 

    <h3>Parameters:</h3>
    <ul>
       <li><code><em>fullpath</em></code>:  A directory path</li>
    </ul>


    <h3>Returns:</h3>
    <ol>
        <li>true or nil</li>
        <li>error if failed</li>
    </ol>

    <h3>Raises:</h3>
    fullpath must be a string

</dd>
    <dt>
    <a name = "makepath"></a>
    <strong>makepath&nbsp;(p)</strong>
    </dt>
    <dd>
    create a directory path. 
 This will create subdirectories as necessary!

    <h3>Parameters:</h3>
    <ul>
       <li><code><em>p</em></code>:  A directory path</li>
    </ul>


    <h3>Returns:</h3>
    <ol>
        a valid created path
    </ol>

    <h3>Raises:</h3>
    p must be a string

</dd>
    <dt>
    <a name = "clonetree"></a>
    <strong>clonetree&nbsp;(path1, path2, file_fun, verbose)</strong>
    </dt>
    <dd>
    clone a directory tree.  Will always try to create a new directory structure
 if necessary.

    <h3>Parameters:</h3>
    <ul>
       <li><code><em>path1</em></code>:  the base path of the source tree</li>
       <li><code><em>path2</em></code>:  the new base path for the destination</li>
       <li><code><em>file_fun</em></code>:  an optional function to apply on all files</li>
       <li><code><em>verbose</em></code>:  an optional boolean to control the verbosity of the output.
  It can also be a logging function that behaves like print()</li>
    </ul>

    <h3>Usage:</h3>
    <ul>
        <pre class="example">clonetree('.','../backup',copyfile)</pre>
    </ul>

    <h3>Returns:</h3>
    <ol>
        <li>true, or nil</li>
        <li>error message, or list of failed directory creations</li>
        <li>list of failed file operations</li>
    </ol>

    <h3>Raises:</h3>
    path1 and path2 must be strings

</dd>
    <dt>
    <a name = "dirtree"></a>
    <strong>dirtree&nbsp;(d)</strong>
    </dt>
    <dd>
    return an iterator over all entries in a directory tree 

    <h3>Parameters:</h3>
    <ul>
       <li><code><em>d</em></code>:  a directory</li>
    </ul>


    <h3>Returns:</h3>
    <ol>
        an iterator giving pathname and mode (true for dir, false otherwise)
    </ol>

    <h3>Raises:</h3>
    d must be a non-empty string

</dd>
    <dt>
    <a name = "getallfiles"></a>
    <strong>getallfiles&nbsp;(start_path, pattern)</strong>
    </dt>
    <dd>
    <p>Recursively returns all the file starting at <i>path</i>.  It can optionally take a shell pattern and</p>

<pre><code>only returns files that match &lt;i&gt;pattern&lt;/i&gt;. If a pattern is given it will do a case insensitive search.
</code></pre>


    <h3>Parameters:</h3>
    <ul>
       <li><code><em>start_path</em></code>:  {string} A directory. If not given, all files in current directory are returned.</li>
       <li><code><em>pattern</em></code>:  {string} A shell pattern. If not given, all files are returned.</li>
    </ul>


    <h3>Returns:</h3>
    <ol>
        Table containing all the files found recursively starting at <i>path</i> and filtered by <i>pattern</i>.
    </ol>

    <h3>Raises:</h3>
    start_path must be a string

</dd>
</dl>


</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
</html>
